/**
 * 显示Toast消息
 * @param {string} title - 消息标题
 * @param {string} icon - 图标类型 ('success', 'error', 'loading', 'none')
 * @param {number} duration - 显示时长(毫秒)
 * @param {Object} options - 其他选项
 */
export function showToast(title, icon = 'none', duration = 2000, options = {}) {
  if (!title) {
    console.warn('[messageUtils] showToast: title is required');
    return;
  }
  
  const toastOptions = {
    title: String(title),
    icon: ['success', 'error', 'loading', 'none'].includes(icon) ? icon : 'none',
    duration: Math.max(1000, Math.min(duration, 10000)), // 限制在1-10秒之间
    ...options
  };
  
  try {
    uni.showToast(toastOptions);
  } catch (error) {
    console.error('[messageUtils] showToast error:', error);
  }
}
 
/**
 * 显示加载状态
 * @param {string} title - 加载提示文字
 * @param {boolean} mask - 是否显示透明蒙层
 */
export function showLoading(title = '加载中...', mask = true) {
  try {
    uni.showLoading({
      title: String(title),
      mask: Boolean(mask)
    });
  } catch (error) {
    console.error('[messageUtils] showLoading error:', error);
  }
}
 
/**
 * 隐藏加载状态
 */
export function hideLoading() {
  try {
    uni.hideLoading();
  } catch (error) {
    console.error('[messageUtils] hideLoading error:', error);
  }
}
 
/**
 * 格式化错误消息
 * @param {string} message - 原始错误消息
 * @param {Object} error - 错误对象
 * @returns {string} 格式化后的用户友好消息
 */
export function formatErrorMessage(message, error) {
  if (!error) return message || '操作失败';
  
  const errorMsg = (error.errMsg || error.message || error.toString()).toLowerCase();
  
  // 网络相关错误
  if (errorMsg.includes('network') || errorMsg.includes('连接')) {
    return '网络连接失败，请检查网络设置';
  }
  if (errorMsg.includes('timeout') || errorMsg.includes('超时')) {
    return '操作超时，请稍后重试';
  }
  
  // 服务器相关错误
  if (errorMsg.includes('500')) {
    return '服务器内部错误，请稍后重试';
  }
  if (errorMsg.includes('404')) {
    return '请求的资源不存在';
  }
  if (errorMsg.includes('403')) {
    return '没有操作权限，请联系管理员';
  }
  if (errorMsg.includes('401')) {
    return '身份验证失败，请重新登录';
  }
  
  // 文件相关错误
  if (errorMsg.includes('file') || errorMsg.includes('文件')) {
    return '文件处理失败，请重试';
  }
  
  // 权限相关错误
  if (errorMsg.includes('auth') || errorMsg.includes('permission')) {
    return '权限不足，请检查应用权限设置';
  }
  
  return message || '操作失败，请重试';
}
 
/**
 * 显示最终错误消息
 * @param {string} message - 错误消息
 * @param {Object} error - 错误对象
 * @param {Object} config - 显示配置
 */
export function showFinalError(message, error, config = {}) {
  const formattedMessage = formatErrorMessage(message, error);
  const { useModal = false, duration = 3000 } = config;
  
  if (useModal) {
    showModal({
      title: '错误提示',
      content: formattedMessage,
      showCancel: false,
      confirmText: '确定'
    });
  } else {
    showToast(formattedMessage, 'error', duration);
  }
}
 
/**
 * 显示确认对话框
 * @param {string} title - 对话框标题
 * @param {string} content - 对话框内容
 * @param {Object} options - 其他选项
 * @returns {Promise} 用户选择结果
 */
export function showModal(title, content, options = {}) {
  const defaultOptions = {
    title: title || '提示',
    content: content || '',
    showCancel: true,
    cancelText: '取消',
    confirmText: '确定'
  };
  
  const modalOptions = { ...defaultOptions, ...options };
  
  return new Promise((resolve, reject) => {
    try {
      uni.showModal({
        ...modalOptions,
        success: (res) => {
          resolve({
            confirm: res.confirm,
            cancel: res.cancel
          });
        },
        fail: (error) => {
          console.error('[messageUtils] showModal error:', error);
          reject(error);
        }
      });
    } catch (error) {
      console.error('[messageUtils] showModal error:', error);
      reject(error);
    }
  });
}
 
/**
 * 显示操作菜单
 * @param {Array} itemList - 菜单项列表
 * @param {Object} options - 其他选项
 * @returns {Promise} 用户选择结果
 */
export function showActionSheet(itemList, options = {}) {
  const { itemColor = '#000000' } = options;
  
  if (!Array.isArray(itemList) || itemList.length === 0) {
    console.warn('[messageUtils] showActionSheet: itemList is required and should not be empty');
    return Promise.reject(new Error('itemList is required'));
  }
  
  return new Promise((resolve, reject) => {
    try {
      uni.showActionSheet({
        itemList,
        itemColor,
        success: (res) => {
          resolve({
            tapIndex: res.tapIndex,
            selectedItem: itemList[res.tapIndex]
          });
        },
        fail: (error) => {
          if (error.errMsg && error.errMsg.includes('cancel')) {
            resolve({ cancel: true });
          } else {
            console.error('[messageUtils] showActionSheet error:', error);
            reject(error);
          }
        }
      });
    } catch (error) {
      console.error('[messageUtils] showActionSheet error:', error);
      reject(error);
    }
  });
}
 
/**
 * 默认导出所有消息工具函数
 */
export default {
  showToast,
  showLoading,
  hideLoading,
  formatErrorMessage,
  showFinalError,
  showModal,
  showActionSheet
};